PyQt PyQt5 Python VTK Gui Actor 选中 高亮显示 actor 您所在的位置:网站首页 python pyqt5安装 mac PyQt PyQt5 Python VTK Gui Actor 选中 高亮显示 actor

PyQt PyQt5 Python VTK Gui Actor 选中 高亮显示 actor

2023-04-25 13:56| 来源: 网络整理| 查看: 265

前言:

    本文主要介绍了如何使用Python VTK高亮显示actor,使用Python语言,高亮显示选中的actor。当窗口中的圆球actor被选中时,会变成红色,并且会显示actor三遍面片边缘信息。

效果:

PyQt PyQt5 Python VTK Gui Actor 选中 高亮显示 actor_python

 VTK

      VTK,(visualizationtoolkit)是一个开放资源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建。

主要函数介绍:

NewPickedActor.GetProperty(): 

通过该函数,可以设置actor的性质,如颜色、表面样式等。

vtk.vtkSphereSource(): 

创建球体的函数,文中通过一个for循环创建了6个球体。

vtk.vtkMinimalStandardRandomSequence():

 VTK的随机数生成器,用于代码中的球体,随机生成球体的大小和位置。

MouseInteractorHighLightActor: 

定义actor操作方法,这个是一个鼠标操作控件的控制方法。

leftButtonPressEvent(self, obj, event): 

这是一个事件触发函数,当鼠标左键点击对应的actor时,会触发函数,对点的actor高亮显示。

Code:

#!/usr/bin/env python # noinspection PyUnresolvedReferences import vtk colors = vtk.vtkNamedColors() NUMBER_OF_SPHERES = 6 class MouseInteractorHighLightActor(vtk.vtkInteractorStyleTrackballCamera): def __init__(self, parent=None): self.AddObserver("LeftButtonPressEvent", self.leftButtonPressEvent) self.LastPickedActor = None self.LastPickedProperty = vtk.vtkProperty() def leftButtonPressEvent(self, obj, event): clickPos = self.GetInteractor().GetEventPosition() picker = vtk.vtkPropPicker() picker.Pick(clickPos[0], clickPos[1], 0, self.GetDefaultRenderer()) # 创建一个新的actor self.NewPickedActor = picker.GetActor() # If something was selected if self.NewPickedActor: # If we picked something before, reset its property if self.LastPickedActor: self.LastPickedActor.GetProperty().DeepCopy(self.LastPickedProperty) if self.LastPickedActor == self.NewPickedActor: self.NewPickedActor.GetProperty().DeepCopy(self.LastPickedProperty) self.LastPickedActor=None else: # Save the property of the picked actor so that we can # restore it next time self.LastPickedProperty.DeepCopy(self.NewPickedActor.GetProperty()) # 高亮选中球体,并显示边缘 self.NewPickedActor.GetProperty().SetColor(colors.GetColor3d('Red')) self.NewPickedActor.GetProperty().SetDiffuse(1.0) self.NewPickedActor.GetProperty().SetSpecular(0.0) self.NewPickedActor.GetProperty().EdgeVisibilityOn() # 保存最后一个选中的actor self.LastPickedActor = self.NewPickedActor self.OnLeftButtonDown() return def main(): # 创建render和window renderer = vtk.vtkRenderer() renderer.SetBackground(colors.GetColor3d('SteelBlue')) renwin = vtk.vtkRenderWindow() renwin.AddRenderer(renderer) renwin.SetSize(640, 600) renwin.SetWindowName('HighlightPickedActor') # 建立interactor(交互操作) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(renwin) # 交互操作方法 style = MouseInteractorHighLightActor() style.SetDefaultRenderer(renderer) interactor.SetInteractorStyle(style) randomSequence = vtk.vtkMinimalStandardRandomSequence() randomSequence.SetSeed(8775070) # 添加球体 for i in range(NUMBER_OF_SPHERES): source = vtk.vtkSphereSource() # random position and radius x = randomSequence.GetRangeValue(-5.0, 5.0) randomSequence.Next() y = randomSequence.GetRangeValue(-5.0, 5.0) randomSequence.Next() z = randomSequence.GetRangeValue(-5.0, 5.0) randomSequence.Next() radius = randomSequence.GetRangeValue(0.5, 1.0) randomSequence.Next() source.SetRadius(radius) source.SetCenter(x, y, z) source.SetPhiResolution(11) source.SetThetaResolution(21) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(source.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) r = randomSequence.GetRangeValue(0.4, 1.0) randomSequence.Next() g = randomSequence.GetRangeValue(0.1, 1.0) randomSequence.Next() b = randomSequence.GetRangeValue(0.6, 1.0) randomSequence.Next() actor.GetProperty().SetDiffuseColor(r, g, b) actor.GetProperty().SetDiffuse(.8) actor.GetProperty().SetSpecular(.5) actor.GetProperty().SetSpecularColor(colors.GetColor3d('White')) actor.GetProperty().SetSpecularPower(10.0) renderer.AddActor(actor) # 运行 interactor.Initialize() renwin.Render() interactor.Start() if __name__ == '__main__': main()


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有